ASP.NET MVC3 checkbox dropdownlist create [migrated]

Posted by user95381 on Programmers See other posts from Programmers or by user95381
Published on 2013-07-01T14:45:00Z Indexed on 2013/07/01 16:28 UTC
Read the original article Hit count: 472

i'm new in asp.net MVC and I/m use view model to poppulate the dropdown list and group of checkboxes. I use SQL Server 2012, where have many to many relationships between Students - Books; Student - Cities. I need collect StudentName, one city and many books for one student.

I have next questions:
1. How can I get the values from database to my StudentBookCityViewModel?
2. How can I save the values to my database in [HttpPost] Create method?

Here is the code:

MODEL

public class Student {
    public int StudentId { get; set; }
    public string StudentName { get; set; }

    public ICollection<Book> Books { get; set; }
    public ICollection<City> Cities { get; set; }
}

public class Book {
    public int BookId { get; set; }
    public string BookName { get; set; }
    public bool IsSelected { get; set; }

    public ICollection<Student> Students { get; set; }
}

public class City {
    public int CityId { get; set; }
    public string CityName { get; set; }
    public bool IsSelected { get; set; }

    public ICollection<Student> Students { get; set; }
}

VIEW MODEL

public class StudentBookCityViewModel {
    public string StudentName { get; set; }
    public IList<Book> Books { get; set; }

    public StudentBookCityViewModel()
    {
        Books = new[]
                    {
                        new Book {BookName = "Title1", IsSelected = false},
                        new Book {BookName = "Title2", IsSelected = false},
                        new Book {BookName = "Title3", IsSelected = false}
                    }.ToList();
    }

    public string City { get; set; }
    public IEnumerable<SelectListItem> CityValues
    {
        get
        {
            return new[]
                       {
                           new SelectListItem {Value = "Value1", Text = "Text1"},
                           new SelectListItem {Value = "Value2", Text = "Text2"},
                           new SelectListItem {Value = "Value3", Text = "Text3"}
                       };
        }
    }
}

Context

public class EFDbContext : DbContext{
    public EFDbContext(string connectionString) {
        Database.Connection.ConnectionString = connectionString;
    }

    public DbSet<Book> Books { get; set; }
    public DbSet<Student> Students { get; set; }
    public DbSet<City> Cities { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<Book>()
            .HasMany(x => x.Students).WithMany(x => x.Books)
            .Map(x => x.MapLeftKey("BookId").MapRightKey("StudentId").ToTable("StudentBooks"));

        modelBuilder.Entity<City>()
            .HasMany(x => x.Students).WithMany(x => x.Cities)
            .Map(x => x.MapLeftKey("CityId").MapRightKey("StudentId").ToTable("StudentCities"));
    }
}

Controller

public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create()
    {
        //I don't understand how I can save values to db

        context.SaveChanges();

        return RedirectToAction("Index");
    }

View

@model UsingEFNew.ViewModels.StudentBookCityViewModel

@using (Html.BeginForm()) { Your Name: @Html.TextBoxFor(model => model.StudentName)

    <div>Genre:</div>
    <div> 
        @Html.DropDownListFor(model => model.City, Model.CityValues)
    </div>
    <div>Books:</div>
    <div>
        @for (int i = 0; i < Model.Books.Count; i++)
        {
            <div>
                @Html.HiddenFor(x => x.Books[i].BookId)
                @Html.CheckBoxFor(x => x.Books[i].IsSelected)
                @Html.LabelFor(x => x.Books[i].IsSelected, Model.Books[i].BookName)
            </div>
        }
    </div>
    <div>
        <input id="btnSubmit" type="submit" value="Submit" />
    </div>
</div>

}

© Programmers or respective owner

Related posts about c#

Related posts about ASP.NET